<?php
/**
 * Created by PhpStorm.
 * User: danny
 * Date: 20-5-30
 * Time: 下午4:40
 */

/** 冒泡排序
 * @param array $arr
 * @return array
 */
function bubble($arr = [])
{
    if (empty($arr)) return $arr;

    $length = count($arr);
    for($i=0; $i<$length-1; $i++)
    {
        for($j=$i+1; $j<$length;$j++)
        {
            if ($arr[$i] < $arr[$j])
            {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$i];
                $arr[$i] = $tmp;
            }
        }
    }

    return $arr;

}

//选择排序
function select($arr = [])
{
    if (empty($arr)) return $arr;

    $length = count($arr);
    for ($i=0; $i<$length-1; $i++)
    {
        $flag = $i;
        for ($j=$i+1; $j<$length; $j++)
        {
            if ($arr[$j] > $arr[$flag])
            {
                $flag = $j;
            }
        }

        $tmp = $arr[$i];
        $arr[$i] = $arr[$flag];
        $arr[$flag] = $tmp;

    }

    return $arr;

}

/**
 * 插入排序，升序和降序的while循环中$j>=0判断很重要
 * @param array $arr
 * @return array
 */
function insert($arr = [])
{
    if (empty($arr)) return $arr;

    $length = count($arr);

    for ($i=1; $i<$length; $i++)
    {
        if ($arr[$i] > $arr[$i-1])
        {
            $j = $i-1;
            $val = $arr[$i];
            $arr[$i] = $arr[$i-1];

            while ($val > $arr[$j] && $j>=0)
            {
                $arr[$j+1] = $arr[$j];
                $j--;
            }
            $arr[$j+1] = $val;
        }
    }

    return $arr;

}




